const sm2 = require('sm-crypto').sm2 // 获取sm2对象
const cipherMode = 1 // 选择加密策略，1 - C1C3C2，0 - C1C2C3，默认为1
const sysPublicKey = '0326b354360793ce0a12382a1c167cd0b196c4d03162228016d9d7fe7f988ef916' // 系统后台公钥
const uiPrivateKey = '' // 前端UI私钥

/**
 * SM2加密string数据
 * @param {string} data 原始数据
 * @returns {string} 加密后数据
 */
export function sm2Encrypt(data) {
  if (data && (typeof data === 'string') && data.constructor === String) {
    let jiamidata = '04' + sm2.doEncrypt(data, sysPublicKey, cipherMode).toLocaleUpperCase()
    return jiamidata
  }
  return null
}

/**
 * SM2加密object数据
 * @param {Object} data 原始数据
 * @returns {string} 加密后数据
 */
export function getSm2DataHexByObject(data) {
  if (data) {
    return '04' + sm2.doEncrypt(JSON.stringify(data), sysPublicKey, cipherMode)
  }
  return null
}

/**
 * SM2解密数据
 * @param {string} dataHex 原始加密数据
 * @returns {string} 解密后数据
 */
export function getSm2DataByString(dataHex) {
  if (dataHex && (typeof dataHex === 'string') && dataHex.constructor === String) {
    dataHex = dataHex.substring(2).toLocaleLowerCase()
    return sm2.doDecrypt(dataHex, uiPrivateKey, cipherMode)
  }
}

